home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / vgl20.zip / VGLPAL.C < prev    next >
Text File  |  1993-05-14  |  4KB  |  131 lines

  1. /*******************************************************************************
  2.  VGLPAL.C
  3.  
  4.  These routines are used to manipulate a palette.  Routines to fade in and out
  5.  and cycle palette entries are included.
  6.  
  7.  Mark Morley
  8.  morley@camosun.bc.ca
  9. *******************************************************************************/
  10.  
  11. #include "vgl.h"
  12.  
  13. static char far Pal[768];
  14.  
  15. /*******************************************************************************
  16.  Sets the active palette to all black.  Useful for drawing a screen and then
  17.  fading in later.
  18. *******************************************************************************/
  19. vglBlack()
  20. {
  21.    memset( Pal, 0, 768 );
  22.    vglSetPal( Pal );
  23.    return;
  24. }
  25.  
  26. /*******************************************************************************
  27.  Fades in from black to the specified palette.
  28. *******************************************************************************/
  29. vglFadeIn( char far* palette )
  30. {
  31.    int i, j, v;
  32.  
  33.    for( i = 0; i < 32; i++ )
  34.    {
  35.       for( j = 0; j < 768; j++ )
  36.          Pal[j] =  (i * (unsigned)palette[j]) >> 5;
  37.       vglSetPal( Pal );
  38.    }
  39.    return;
  40. }
  41.  
  42. /*******************************************************************************
  43.  Fades to black from a specified palette.
  44. *******************************************************************************/
  45. vglFadeOut( char far* palette )
  46. {
  47.    int i, j, v;
  48.  
  49.    for( i = 31; i >= 0; i-- )
  50.    {
  51.       for( j = 0; j < 768; j++ )
  52.          Pal[j] =  (i * (unsigned)palette[j]) >> 5;
  53.       vglSetPal( Pal );
  54.    }
  55.    return;
  56. }
  57.  
  58. /*******************************************************************************
  59.  Fades in only a part of the palette.
  60. *******************************************************************************/
  61. vglPartFadeIn( int first, int num, char far* palette )
  62. {
  63.    int i, j, v;
  64.  
  65.    for( i = 0; i < 32; i++ )
  66.    {
  67.       for( j = 0; j < num * 3; j++ )
  68.          Pal[j] =  (i * (unsigned)palette[j]) >> 5;
  69.       vglSetPartPal( first, num, Pal );
  70.    }
  71.    return;
  72. }
  73.  
  74. /*******************************************************************************
  75.  Fades out only a part of the palette.
  76. *******************************************************************************/
  77. vglPartFadeOut( int first, int num, char far* palette )
  78. {
  79.    int i, j, v;
  80.  
  81.    for( i = 31; i >= 0; i-- )
  82.    {
  83.       for( j = 0; j < num * 3; j++ )
  84.          Pal[j] =  (i * (unsigned)palette[j]) >> 5;
  85.       vglSetPartPal( first, num, Pal );
  86.    }
  87.    return;
  88. }
  89.  
  90. /*******************************************************************************
  91.  Cycles 'num' palette entries, starting at the 'first' entry.  Entries are
  92.  cycled to the "left".
  93. *******************************************************************************/
  94. vglPartCycleL( int first, int num, char far* palette )
  95. {
  96.    int i, a, b, c;
  97.  
  98.    num--;
  99.    a = palette[0];
  100.    b = palette[1];
  101.    c = palette[2];
  102.    for( i = 0; i < num * 3; i++ )
  103.       palette[i] = palette[i + 3];
  104.    palette[i] = a;
  105.    palette[i + 1] = b;
  106.    palette[i + 2] = c;
  107.    vglSetPartPal( first, num + 1, palette );
  108.    return;
  109. }
  110.  
  111. /*******************************************************************************
  112.  Cycles 'num' palette entries, starting at the 'first' entry.  Entries are
  113.  cycled to the "right".
  114. *******************************************************************************/
  115. vglPartCycleR( int first, int num, char far* palette )
  116. {
  117.    int i, a, b, c;
  118.  
  119.    i = (num * 3) - 1;
  120.    a = palette[i - 2];
  121.    b = palette[i - 1];
  122.    c = palette[i];
  123.    for( ; i >= 3; i-- )
  124.       palette[i] = palette[i - 3];
  125.    palette[0] = a;
  126.    palette[1] = b;
  127.    palette[2] = c;
  128.    vglSetPartPal( first, num, palette );
  129.    return;
  130. }
  131.